關於Node
的知識我們已經學得差不多啦,接下來就是進入Topic
囉!
我們現在已經知道可以用不同的node
執行不同的功能,但他們之間的溝通需要透過topic
,那麼到底topic
是甚麼呢?
topic
於我的理解有點像是hashtag
的那種標籤的機制,就像T客邦的文章標籤的功能,如果我訂閱了某個標籤,那麼只要某個文章中有標記那個標籤,我就可以收到通知說有新的關於那個標籤的文章上線囉!可以去查看該文章這樣。node
可以利用發布關於某種topic
的資訊,而如果有node
負責監聽該種topic
的資訊,就可以接收得到這個資訊,這就是所謂的publisher
(發布者)和subscriber
(訂閱者)。publisher
和subscriber
的關係可以是一對一、一對多、多對一和多對多,因為topic
會檢查誰發布了新的資訊,也會檢查有誰訂閱該資訊,並發送出去喔!
至於怎麼做到這個機制呢? 他其實是透過TCP/IP
來傳輸的,所以我們在使用rosnode info
這個指令的時候,會看到該node
底下的ip位址,以下圖來說,這個node
的ip位址就是http://tegra-ubuntu:35475
囉! ROS將這樣的傳輸方式定義為TCPROS
,有沒有發現他不管用甚麼類似的指令或是概念,都要加上一個ROS呢? 那就表示你越來越熟悉ROS啦XD
兩個node
在透過Topic
傳遞資料的時候,必須先講好這個傳遞的方式,也就是該訊息的格式啦! 以網站的方式講,大概就是打API的時候限定只能傳JSON格式的資料,這樣API撈的時候就可以從JSON檔中解析資料出來吧!
每個Topic都需要先定義好要使用怎樣的message type
,有控制動作的actionlib_msgs
、導航用的nav_msgs
、感測器用的sensor_msgs
等等,有些別人已經寫好的,也可以自定義自己的message
,因為有蠻多不同的格式的,一一細講太麻煩了,就讓我們在之後的實作中來玩玩看這些訊息的格式吧!
ROS wiki - Topics
ROS tutorial - Understanding Topics
ROS wiki - Common messages